"""
    1. 程序执行过程
                       pyc
    源代码 -- 编译 --> 字节码 -- 解释 --> 机器码
         |————1次———|

    注意:只有被导入模块,才会生成pyc文件
        通常main.py没有pyc文件,所以代码量应该较少.

    2. Python语言内存管理机制
        (1)引用计数：
            每个数据记录被变量绑定的数量
            当为0时被销毁。
        (2)标记清除:
            对内存空间全盘扫描,检测不能使用的数据
        (3)分代回收
            程序运行时,将内存空间分为012(小中大)三代
            每次创建新数据,一定存储在0代.
            如果内存告急,触发标记清除,最后将有用数据升代
        内存优化：
            尽少产生垃圾,内置对象池(数值/str/bool),配置垃圾回收器

    3. 身份运算符
        数据内存地址是否相同

"""
data01 = [10]
data02 = [10]
# 内容是否相同
print(data01 == data02) # True
# 地址是否相同
print(data01 is data02) # False
# print(id(data01) == id(data02)) # False


a = []
b = a
del a, b  # 因为变量被删除,列表引用计数为0,所以被销毁

e = 1
e = 2
e = 3

# 循环引用：两个小垃圾,始终占用内存空间不释放.
c = []
d = []
c.append(d)
d.append(c)
del c, d

for i in range(10000):
    pass

# 当创建数据时,先判断池中是否具有相同数据;
# 如果有则返回地址,没有再创建新数据;
# 从而节省空间(相同数据只存储1份)
data01 = ("悟空",)
data02 = ("悟空",)
print(id(data01))
print(id(data02))
